/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servidorcorreiosrest.resources;

import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

/**
 *
 * @author cpaz
 */
@Path("/servidorcorreios/usuarios")
public class UsuariosResource {

    static ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{login}")
    public Usuario getUsuario(@PathParam("login") String login) {
        for(Usuario x: usuarios){
            if(x.login.equals(login)){
                return x;
            }
        }
        return null;
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public ArrayList<Usuario> listaUsuarios()
    {
        return usuarios;
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("listarmensagens")
    public List<Mensagem> listarMensagens(@QueryParam("login")String login, @QueryParam("senha")String senha)
    {
        for(Usuario u : usuarios)
        {
            if((u.login == null ? login == null : u.login.equals(login)) && (u.senha == null ? senha == null : u.senha.equals(senha)))
                return u.mensagens;
        }
        return null;
    }
    
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("obtermensagem")
    public Response obterMensagem(@QueryParam("login")String login, @QueryParam("senha")String senha, @QueryParam("id")int id)
    {
        for(Usuario u : usuarios)
        {
            if((u.login == null ? login == null : u.login.equals(login)) && (u.senha == null ? senha == null : u.senha.equals(senha)))
            {
                u.mensagens.get(id).setLida(true);
                return Response.status(Response.Status.OK).entity(u.mensagens.get(id)).build();
            }
        }
        return Response.status(Response.Status.NOT_ACCEPTABLE).build();
    }

    @DELETE
    @Produces(MediaType.APPLICATION_XML)
    @Path("deletarmensagem")
    public Response deletarMensagem(@QueryParam("login")String login, @QueryParam("senha")String senha, @QueryParam("id")int id)
    {
        for(Usuario u : usuarios)
        {
            if((u.login == null ? login == null : u.login.equals(login)) && (u.senha == null ? senha == null : u.senha.equals(senha)))
                    return Response.status(Response.Status.OK).entity(u.mensagens.remove(id)).build();
        }
        return Response.status(Response.Status.NOT_ACCEPTABLE).build();
    }

    @POST
    @Produces(MediaType.APPLICATION_XML)
    public Response createUser(@QueryParam("nome") String nome, @QueryParam("login") String login, @QueryParam("senha") String senha) {
        
        for(Usuario x: usuarios){
            if(x.login.equals(login)){
                String result = "Usuario ja existe "+login;
                System.out.println(result);
                return Response.status(Response.Status.NOT_ACCEPTABLE).entity(result).build();
            }
        }
        Usuario usuario = new Usuario(login, nome, senha);
        usuarios.add(usuario);
        System.out.println("Usuario Criado: "+login);
        return Response.status(Response.Status.OK).entity(usuario).build();
    }

    @POST
    @Produces(MediaType.APPLICATION_XML)
    @Path("enviarmensagem")
    public Response enviarMensagem(@QueryParam("remetente")String remetente, @QueryParam("senha")String senha, @QueryParam("mensagem")String texto, @QueryParam("destinatario")String destinatario){
        boolean remetenteinexistente = true, senhainvalida = true, destinatarioinexistente = true;
        Usuario destino = null;
        for(Usuario u : usuarios)
        {
            if(u.login == null ? remetente == null : u.login.equals(remetente) && !u.login.equals(""))
            {
                remetenteinexistente = false;
                if(u.senha == null ? senha == null : u.senha.equals(senha) && !u.senha.equals(""))
                {
                    senhainvalida = false;
                }
            }
            if(u.login == null ? destinatario == null : u.login.equals(destinatario) && !u.login.equals(""))
            {
                destinatarioinexistente = false;
                destino = u;
            }
        }

        if(remetenteinexistente)
            return Response.status(Response.Status.NOT_FOUND).entity(remetente).build();

        if(senhainvalida)
            return Response.status(Response.Status.PRECONDITION_FAILED).entity(senha).build();

        if(destinatarioinexistente)
            return Response.status(Response.Status.NOT_FOUND).entity(destinatario).build();

        Mensagem x = new Mensagem(remetente, texto, destinatario);

        destino.mensagens.add(x);

        return Response.status(Response.Status.OK).entity(x.texto).build();
    }
}
